package com.cloudservice.ccs.controller;


import com.cloudservice.ccs.biz.IWorkloadStatisticsBiz;
import com.cloudservice.ccs.model.ApiResult;
import com.cloudservice.ccs.model.PageData;
import com.cloudservice.ccs.entity.WorkloadStatistics;
import com.cloudservice.ccs.model.WorkloadStatisticsWithAverage;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/workload-statistics")
public class WorkloadStatisticsController {
	@Autowired
	private IWorkloadStatisticsBiz workloadStatisticsBiz;

	@PostMapping("/")
	public ApiResult save(@RequestBody WorkloadStatistics workloadStatistics) {
		// 接口问题待讨论：是否应当返回生成的 id？
		workloadStatisticsBiz.save(workloadStatistics);
		return ApiResult.success();
	}

	@PutMapping("/{id}")
	public ApiResult update(@PathVariable Integer id, @RequestBody WorkloadStatistics workloadStatistics) {
		workloadStatisticsBiz.update(id, workloadStatistics);
		WorkloadStatistics result = workloadStatisticsBiz.getOne(id);
		return ApiResult.successWithData(result);
	}

	@PutMapping("/{id}/partial")
	public ApiResult partialUpdate(@PathVariable Integer id, @RequestBody Map<String, Object> fields) {
		workloadStatisticsBiz.partialUpdate(id, fields);
		WorkloadStatistics result = workloadStatisticsBiz.getOne(id);
		return ApiResult.successWithData(result);
	}

	@DeleteMapping("/{id}")
	public ApiResult delete(@PathVariable Integer id) {
		workloadStatisticsBiz.delete(id);
		return ApiResult.success();
	}

	@GetMapping("/{id}")
	public ApiResult queryById(@PathVariable Integer id) {
		WorkloadStatistics result = workloadStatisticsBiz.getOne(id);
		return ApiResult.successWithData(result);
	}

	@RequiresPermissions("all")
	@GetMapping("/")
	public ApiResult queryAll(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "0") Integer limit) {
		PageHelper.startPage(page, limit);
		List<WorkloadStatistics> result =  workloadStatisticsBiz.getAll();
		return ApiResult.successWithData(PageData.fromPage((Page<WorkloadStatistics>) result));
	}

	@GetMapping("/with-average")
	public ApiResult queryAllWithAverage(@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "0") Integer limit) {
		List<WorkloadStatisticsWithAverage> result = workloadStatisticsBiz.getAllWithAverage();
		return ApiResult.successWithData(PageData.fromList(result, page, limit));
	}

	@GetMapping("/aggregation")
	public ApiResult queryAggregation() {
		return ApiResult.successWithData(workloadStatisticsBiz.getAggregation());
	}
}
